home *** CD-ROM | disk | FTP | other *** search
/ Giga Games 1 / Giga Games.iso / net / usenet / volume7 / nethack3 / patch4g < prev    next >
Encoding:
Internet Message Format  |  1989-10-02  |  59.7 KB

  1. Path: uunet!zephyr.ens.tek.com!tekgen!tekred!saab!billr
  2. From: billr@saab.CNA.TEK.COM (Bill Randle)
  3. Newsgroups: comp.sources.games
  4. Subject: v08i043:  NetHack3 -  display oriented dungeons & dragons (Ver. 3.0), Patch4g
  5. Message-ID: <4633@tekred.CNA.TEK.COM>
  6. Date: 29 Sep 89 21:12:32 GMT
  7. Sender: nobody@tekred.CNA.TEK.COM
  8. Lines: 2079
  9. Approved: billr@saab.CNA.TEK.COM
  10.  
  11. Submitted-by: Izchak Miller <izchak@linc.cis.upenn.edu>
  12. Posting-number: Volume 8, Issue 43
  13. Archive-name: NetHack3/Patch4g
  14. Patch-To: NetHack3: Volume 7, Issue 56-93
  15.  
  16. #! /bin/sh
  17. # This is a shell archive.  Remove anything before this line, then unpack
  18. # it by saving it into a file and typing "sh file".  To overwrite existing
  19. # files, type "sh file -c".  You can also feed this as standard input via
  20. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  21. # will see the following message at the end:
  22. #        "End of archive 7 (of 11)."
  23. # Contents:  patches04g
  24. # Wrapped by billr@saab on Fri Sep 29 13:24:55 1989
  25. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  26. if test -f 'patches04g' -a "${1}" != "-c" ; then 
  27.   echo shar: Will not clobber existing file \"'patches04g'\"
  28. else
  29. echo shar: Extracting \"'patches04g'\" \(57252 characters\)
  30. sed "s/^X//" >'patches04g' <<'END_OF_FILE'
  31. X*** amiga/Old/Install.ami    Wed Sep 27 10:12:13 1989
  32. X--- amiga/Install.ami    Thu Sep 14 23:30:52 1989
  33. X***************
  34. X*** 43,51 ****
  35. X  For floppy users (as I am), source is split over two diskettes, SRC1 and
  36. X  SRC2. The first contains roughly [a-l]*.c, the second [m-z]*.c. Include
  37. X  files are in the Assigned directory INCLUDE:, on SRC1:include. You may want
  38. X! to rename hack.h to _hack.h, see below. Amiga specific files are in AMIGA:,
  39. X! in SRC1:amiga. The modified stdio.h and friends also go there. There must
  40. X! also be an AUXIL: somewhere.
  41. X  
  42. X  On a harddisk, you can either Assign SRC1: and SRC2: to the same directory,
  43. X  or change the makefile slightly.
  44. X--- 43,53 ----
  45. X  For floppy users (as I am), source is split over two diskettes, SRC1 and
  46. X  SRC2. The first contains roughly [a-l]*.c, the second [m-z]*.c. Include
  47. X  files are in the Assigned directory INCLUDE:, on SRC1:include. You may want
  48. X! to (initially) copy hack.h to _hack.h, see below. Amiga specific files are
  49. X! in AMIGA:, in SRC1:amiga. The modified stdio.h and friends also go there.
  50. X! There must also be an AUXIL: somewhere. I put all files that are not
  51. X! necessary for the Amiga version on the same disk as AUXIL:, otherwise it
  52. X! will not fit.
  53. X  
  54. X  On a harddisk, you can either Assign SRC1: and SRC2: to the same directory,
  55. X  or change the makefile slightly.
  56. X***************
  57. X*** 114,131 ****
  58. X    hh                      2606
  59. X    history                  1503
  60. X    license                  4417
  61. X!   NetHack                654324  #
  62. X!   NetHack.cnf                  1990  #
  63. X    opthelp                  3549
  64. X    oracles                  3370
  65. X    perm                     0
  66. X!   record                   197  #
  67. X    rumors                 16899
  68. X    tower1                   369
  69. X    tower2                   337
  70. X    tower3                   371
  71. X  
  72. X! # These sizes may vary
  73. X  
  74. X  Happy NetHacking!
  75. X  
  76. X--- 116,133 ----
  77. X    hh                      2606
  78. X    history                  1503
  79. X    license                  4417
  80. X!   NetHack                654324
  81. X!   NetHack.cnf                  1990
  82. X    opthelp                  3549
  83. X    oracles                  3370
  84. X    perm                     0
  85. X!   record                   197
  86. X    rumors                 16899
  87. X    tower1                   369
  88. X    tower2                   337
  89. X    tower3                   371
  90. X  
  91. X! These sizes may vary from version to version
  92. X  
  93. X  Happy NetHacking!
  94. X  
  95. X*** amiga/Old/Makefile.ami    Wed Sep 27 10:12:29 1989
  96. X--- amiga/Makefile.ami    Tue Sep 26 19:37:26 1989
  97. X***************
  98. X*** 41,58 ****
  99. X  # other things that have to be reconfigured are in config.h,
  100. X  # {unixconf.h, pcconf.h, amiconf.h}, and possibly system.h
  101. X  
  102. X! # HACKCSRC = alloc.c apply.c artifact.c attrib.c bones.c cmd.c dbridge.c \
  103. X! #        decl.c demon.c do.c do_name.c do_wear.c dog.c dogmove.c dokick.c \
  104. X! #        dothrow.c eat.c end.c engrave.c exper.c extralev.c fountain.c \
  105. X! #        getline.c hack.c invent.c lock.c mail.c makemon.c mcastu.c mhitm.c \
  106. X! #        mhitu.c mklev.c mkmaze.c mkobj.c mkroom.c mon.c mondata.c \
  107. X! #        monmove.c monst.c mthrowu.c music.c o_init.c objects.c objnam.c \
  108. X! #        options.c pager.c pickup.c polyself.c potion.c pray.c pri.c \
  109. X! #        priest.c prisym.c read.c restore.c rip.c rnd.c rumors.c save.c \
  110. X! #        search.c shk.c shknam.c sit.c sounds.c sp_lev.c spell.c steal.c \
  111. X! #        termcap.c timeout.c topl.c topten.c track.c trap.c u_init.c \
  112. X! #        uhitm.c vault.c version.c weapon.c were.c wield.c wizard.c worm.c \
  113. X! #        worn.c write.c zap.c
  114. X  
  115. X  # all .c files but msdos.c, tos.c, *main.c, *tty.c, *unix.c, (system specific)
  116. X  # and makedefs.c, lev_comp.c, panic.c (not part of any nethack)
  117. X--- 41,58 ----
  118. X  # other things that have to be reconfigured are in config.h,
  119. X  # {unixconf.h, pcconf.h, amiconf.h}, and possibly system.h
  120. X  
  121. X! # HACKCSRC = allmain.c alloc.c apply.c artifact.c attrib.c bones.c cmd.c \
  122. X! #        dbridge.c decl.c demon.c do.c do_name.c do_wear.c dog.c dogmove.c \
  123. X! #        dokick.c dothrow.c eat.c end.c engrave.c exper.c extralev.c \
  124. X! #        fountain.c getline.c hack.c invent.c lock.c mail.c makemon.c \
  125. X! #        mcastu.c mhitm.c mhitu.c mklev.c mkmaze.c mkobj.c mkroom.c mon.c \
  126. X! #        mondata.c monmove.c monst.c mthrowu.c music.c o_init.c objects.c \
  127. X! #        objnam.c options.c pager.c pickup.c polyself.c potion.c pray.c \
  128. X! #        pri.c priest.c prisym.c read.c restore.c rip.c rnd.c rumors.c \
  129. X! #        save.c search.c shk.c shknam.c sit.c sounds.c sp_lev.c spell.c \
  130. X! #        steal.c termcap.c timeout.c topl.c topten.c track.c trap.c \
  131. X! #        u_init.c uhitm.c vault.c version.c weapon.c were.c wield.c \
  132. X! #        wizard.c worm.c worn.c write.c zap.c
  133. X  
  134. X  # all .c files but msdos.c, tos.c, *main.c, *tty.c, *unix.c, (system specific)
  135. X  # and makedefs.c, lev_comp.c, panic.c (not part of any nethack)
  136. X***************
  137. X*** 73,82 ****
  138. X  # SOURCES = $(CSOURCES) $(HSOURCES)
  139. X  
  140. X  AOBJ  = amidos.o amitcap.o amitty.o amiunix.o amiwind.o
  141. X! HOBJ1 = alloc.o apply.o artifact.o attrib.o bones.o cmd.o dbridge.o decl.o \
  142. X!     demon.o do.o do_name.o do_wear.o dog.o dogmove.o dokick.o dothrow.o \
  143. X!     eat.o end.o engrave.o exper.o extralev.o fountain.o getline.o hack.o \
  144. X!     invent.o lock.o
  145. X  HOBJ2 = mail.o main.o makemon.o mcastu.o mhitm.o mhitu.o mklev.o mkmaze.o \
  146. X      mkobj.o mkroom.o mon.o mondata.o monmove.o monst.o mthrowu.o music.o \
  147. X      o_init.o objects.o objnam.o options.o pager.o pickup.o polyself.o \
  148. X--- 73,82 ----
  149. X  # SOURCES = $(CSOURCES) $(HSOURCES)
  150. X  
  151. X  AOBJ  = amidos.o amitcap.o amitty.o amiunix.o amiwind.o
  152. X! HOBJ1 = allmain.o alloc.o apply.o artifact.o attrib.o bones.o cmd.o dbridge.o \
  153. X!     decl.o demon.o do.o do_name.o do_wear.o dog.o dogmove.o dokick.o \
  154. X!     dothrow.o eat.o end.o engrave.o exper.o extralev.o fountain.o \
  155. X!     getline.o hack.o invent.o lock.o
  156. X  HOBJ2 = mail.o main.o makemon.o mcastu.o mhitm.o mhitu.o mklev.o mkmaze.o \
  157. X      mkobj.o mkroom.o mon.o mondata.o monmove.o monst.o mthrowu.o music.o \
  158. X      o_init.o objects.o objnam.o options.o pager.o pickup.o polyself.o \
  159. X***************
  160. X*** 201,206 ****
  161. X--- 201,207 ----
  162. X  
  163. X  # DO NOT DELETE THIS LINE
  164. X  
  165. X+ allmain.o:  include:hack.h
  166. X  alloc.o:  include:config.h
  167. X  apply.o:  include:hack.h include:edog.h
  168. X  artifact.o:  include:hack.h include:artifact.h
  169. X*** amiga/Old/amidos.c    Wed Sep 27 10:13:14 1989
  170. X--- amiga/amidos.c    Sun Sep 17 14:26:11 1989
  171. X***************
  172. X*** 10,15 ****
  173. X--- 10,16 ----
  174. X  #undef COUNT
  175. X  #undef NULL
  176. X  
  177. X+ #define NEED_VARARGS
  178. X  #include "hack.h"
  179. X  
  180. X  extern char Initialized;
  181. X***************
  182. X*** 77,95 ****
  183. X      return x < 0? -x: x;
  184. X  }
  185. X  
  186. X- #ifdef REDO
  187. X- 
  188. X- int
  189. X- tgetch()
  190. X- {
  191. X-     char ch, popch();
  192. X- 
  193. X-     if (!(ch = popch())) {
  194. X-     ch = WindowGetchar();
  195. X-     }
  196. X-     return ((ch == '\r') ? '\n' : ch);
  197. X- }
  198. X- #else /* REDO /**/
  199. X  int
  200. X  tgetch() {
  201. X      char ch;
  202. X--- 78,83 ----
  203. X***************
  204. X*** 97,105 ****
  205. X      ch = WindowGetchar();
  206. X      return ((ch == '\r') ? '\n' : ch);
  207. X  }
  208. X- #endif /* REDO /**/
  209. X  
  210. X- 
  211. X  #ifdef DGK
  212. X  # include <ctype.h>
  213. X  /* # include <fcntl.h> */
  214. X--- 85,91 ----
  215. X***************
  216. X*** 221,233 ****
  217. X      dirLock = CurrentDir(dirLock);
  218. X  
  219. X      strcpy(buf, files);
  220. X!     for (i = 0; i < MAXLEVEL; i++) {
  221. X          name_file(buf, i);
  222. X          if (fileLock = Lock(buf, SHARED_LOCK)) {
  223. X          UnLock(fileLock);
  224. X          DeleteFile(buf);
  225. X          }
  226. X-     }
  227. X  
  228. X      UnLock(CurrentDir(dirLock));
  229. X      }
  230. X--- 207,220 ----
  231. X      dirLock = CurrentDir(dirLock);
  232. X  
  233. X      strcpy(buf, files);
  234. X!     for (i = 0; i <= MAXLEVEL; i++) {
  235. X          name_file(buf, i);
  236. X          if (fileLock = Lock(buf, SHARED_LOCK)) {
  237. X          UnLock(fileLock);
  238. X          DeleteFile(buf);
  239. X+         } else if (IoErr() == ERROR_DEVICE_NOT_MOUNTED)
  240. X+         break;
  241. X          }
  242. X  
  243. X      UnLock(CurrentDir(dirLock));
  244. X      }
  245. X***************
  246. X*** 298,303 ****
  247. X--- 285,293 ----
  248. X          UnLock(fileLock);
  249. X          if (status = CopyFile(from, to))
  250. X          goto failed;
  251. X+     } else if (IoErr() == ERROR_DEVICE_NOT_MOUNTED) {
  252. X+         status = "disk not present";
  253. X+         goto failed;
  254. X      }
  255. X      }
  256. X  
  257. X***************
  258. X*** 488,494 ****
  259. X          int  lth;
  260. X  
  261. X          if ((lth = sscanf(bufp,
  262. X!          "%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d",
  263. X                  &translate[0], &translate[1], &translate[2],
  264. X                  &translate[3], &translate[4], &translate[5],
  265. X                  &translate[6], &translate[7], &translate[8],
  266. X--- 478,484 ----
  267. X          int  lth;
  268. X  
  269. X          if ((lth = sscanf(bufp,
  270. X!          "%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d",
  271. X                  &translate[0], &translate[1], &translate[2],
  272. X                  &translate[3], &translate[4], &translate[5],
  273. X                  &translate[6], &translate[7], &translate[8],
  274. X***************
  275. X*** 497,502 ****
  276. X--- 487,493 ----
  277. X                  &translate[15], &translate[16], &translate[17],
  278. X                  &translate[18], &translate[19], &translate[20],
  279. X                  &translate[21], &translate[22], &translate[23],
  280. X+                 &translate[24], &translate[25], &translate[26],
  281. X                  &translate[27], &translate[28], &translate[29],
  282. X                  &translate[30], &translate[31])) < 0) {
  283. X              msmsg ("Syntax error in GRAPHICS\n");
  284. X***************
  285. X*** 572,583 ****
  286. X  }
  287. X  
  288. X  void
  289. X! msmsg(fmt, a1, a2, a3)
  290. X! char *fmt;
  291. X! long a1, a2, a3;
  292. X! {
  293. X!     printf(fmt, a1, a2, a3);
  294. X      (void) fflush(stdout);
  295. X  }
  296. X  
  297. X  /* Follow the PATH, trying to fopen the file.
  298. X--- 563,574 ----
  299. X  }
  300. X  
  301. X  void
  302. X! msmsg VA_DECL(char *, fmt)
  303. X!     VA_START(fmt);
  304. X!     VA_INIT(fmt, char *);
  305. X!     vprintf(fmt, VA_ARGS);
  306. X      (void) fflush(stdout);
  307. X+     VA_END();
  308. X  }
  309. X  
  310. X  /* Follow the PATH, trying to fopen the file.
  311. X***************
  312. X*** 710,715 ****
  313. X--- 701,707 ----
  314. X   *  memcmp - used to compare two struct symbols, in lev.c
  315. X   */
  316. X  
  317. X+ #ifndef memcmp
  318. X  memcmp(a, b, size)
  319. X  register unsigned char *a, *b;
  320. X  register int size;
  321. X***************
  322. X*** 721,723 ****
  323. X--- 713,728 ----
  324. X  
  325. X      return 0;        /* equal */
  326. X  }
  327. X+ #endif
  328. X+ 
  329. X+ #ifndef memcpy
  330. X+ char *
  331. X+ memcpy(dest, source, size)
  332. X+ register char *dest;
  333. X+ char *source;
  334. X+ int size;
  335. X+ {
  336. X+     movmem(source, dest, size);
  337. X+     return dest;
  338. X+ }
  339. X+ #endif
  340. X*** amiga/Old/amimenu.c    Wed Sep 27 10:14:01 1989
  341. X--- amiga/amimenu.c    Thu Sep 14 23:30:47 1989
  342. X***************
  343. X*** 10,16 ****
  344. X    {0,1,JAM2,0,0,(struct TextAttr*)NULL,(UBYTE*)str,(struct IntuiText*)NULL}
  345. X  
  346. X      /* Commands */
  347. X!     TEXT(T_HELP,  "?   Display help");
  348. X      TEXT(T_O,     "O   Set options");
  349. X      TEXT(T_SHELL, "!   AmigaDos commands");
  350. X      TEXT(T_v,     "v   Version number");
  351. X--- 10,17 ----
  352. X    {0,1,JAM2,0,0,(struct TextAttr*)NULL,(UBYTE*)str,(struct IntuiText*)NULL}
  353. X  
  354. X      /* Commands */
  355. X!     TEXT(T_HELP,  "?   Display help menu");
  356. X!     TEXT(T_amp,   "&   Explain a command");
  357. X      TEXT(T_O,     "O   Set options");
  358. X      TEXT(T_SHELL, "!   AmigaDos commands");
  359. X      TEXT(T_v,     "v   Version number");
  360. X***************
  361. X*** 33,43 ****
  362. X      TEXT(T_a,     "a   Apply/use something");
  363. X      TEXT(T_e,     "e   Eat something");
  364. X      TEXT(T_q,     "q   Quaff a potion");
  365. X!     TEXT(T_r,     "r   Read a scroll");
  366. X      TEXT(T_t,     "t   Throw/shoot weapon");
  367. X      TEXT(T_z,     "z   Zap a wand");
  368. X      TEXT(T_Z,     "Z   Cast a spell");
  369. X-     TEXT(T_X,     "X   Learn a spell");
  370. X      TEXT(T_HASH,  "#   Extended command");
  371. X  
  372. X      /* Preparations */
  373. X--- 34,43 ----
  374. X      TEXT(T_a,     "a   Apply/use something");
  375. X      TEXT(T_e,     "e   Eat something");
  376. X      TEXT(T_q,     "q   Quaff a potion");
  377. X!     TEXT(T_r,     "r   Read scroll/book");
  378. X      TEXT(T_t,     "t   Throw/shoot weapon");
  379. X      TEXT(T_z,     "z   Zap a wand");
  380. X      TEXT(T_Z,     "Z   Cast a spell");
  381. X      TEXT(T_HASH,  "#   Extended command");
  382. X  
  383. X      /* Preparations */
  384. X***************
  385. X*** 73,91 ****
  386. X  
  387. X  static struct MenuItem cmdsub[] = {
  388. X      { &cmdsub[1], IDATA('?', T_HELP,   0) }, /*   Display help */
  389. X!     { &cmdsub[2], IDATA('O', T_O,     10) }, /*   Set options */
  390. X!     { &cmdsub[3], IDATA('!', T_SHELL, 20) }, /*   AmigaDos commands */
  391. X!     { &cmdsub[4], IDATA('v', T_v,     30) }, /*   Version number */
  392. X!     { &cmdsub[5], IDATA(022, T_CR,    40) }, /*R  Redraw screen */
  393. X!     { &cmdsub[6], IDATA(020 ,T_CP,    50) }, /*P  Repeat last message */
  394. X!     { &cmdsub[7], IDATA('Q', T_Q,     60) }, /*   Quit game */
  395. X!     { NULL,      IDATA('S', T_S,     70) }, /*   Save the game */
  396. X  };
  397. X  
  398. X  /* Inventory */
  399. X  
  400. X  #undef    WDT
  401. X! #define WDT 200
  402. X  
  403. X  static struct MenuItem invsub[] = {
  404. X      { &invsub[1], IDATA('i', T_i,      0) }, /*   Inventory */
  405. X--- 73,92 ----
  406. X  
  407. X  static struct MenuItem cmdsub[] = {
  408. X      { &cmdsub[1], IDATA('?', T_HELP,   0) }, /*   Display help */
  409. X!     { &cmdsub[2], IDATA('&', T_amp,   10) }, /*   Explain a command */
  410. X!     { &cmdsub[3], IDATA('O', T_O,     20) }, /*   Set options */
  411. X!     { &cmdsub[4], IDATA('!', T_SHELL, 30) }, /*   AmigaDos commands */
  412. X!     { &cmdsub[5], IDATA('v', T_v,     40) }, /*   Version number */
  413. X!     { &cmdsub[6], IDATA(022, T_CR,    50) }, /*R  Redraw screen */
  414. X!     { &cmdsub[7], IDATA(020 ,T_CP,    60) }, /*P  Repeat last message */
  415. X!     { &cmdsub[8], IDATA('Q', T_Q,     70) }, /*   Quit game */
  416. X!     { NULL,      IDATA('S', T_S,     80) }, /*   Save the game */
  417. X  };
  418. X  
  419. X  /* Inventory */
  420. X  
  421. X  #undef    WDT
  422. X! #define WDT 184
  423. X  
  424. X  static struct MenuItem invsub[] = {
  425. X      { &invsub[1], IDATA('i', T_i,      0) }, /*   Inventory */
  426. X***************
  427. X*** 106,117 ****
  428. X      { &actsub[1], IDATA('a', T_a,     0) }, /*   Apply/use something */
  429. X      { &actsub[2], IDATA('e', T_e,    10) }, /*   Eat something */
  430. X      { &actsub[3], IDATA('q', T_q,    20) }, /*   Quaff a potion */
  431. X!     { &actsub[4], IDATA('r', T_r,    30) }, /*   Read a scroll */
  432. X      { &actsub[5], IDATA('t', T_t,    40) }, /*   Throw/shoot weapon */
  433. X      { &actsub[6], IDATA('z', T_z,    50) }, /*   Zap a wand */
  434. X      { &actsub[7], IDATA('Z', T_Z,    60) }, /*   Cast a spell */
  435. X!     { &actsub[8], IDATA('X', T_X,    70) }, /*   Learn a spell */
  436. X!     { NULL    , IDATA('#', T_HASH, 80) }, /*   Extended command */
  437. X  };
  438. X  
  439. X  /* Preparations */
  440. X--- 107,117 ----
  441. X      { &actsub[1], IDATA('a', T_a,     0) }, /*   Apply/use something */
  442. X      { &actsub[2], IDATA('e', T_e,    10) }, /*   Eat something */
  443. X      { &actsub[3], IDATA('q', T_q,    20) }, /*   Quaff a potion */
  444. X!     { &actsub[4], IDATA('r', T_r,    30) }, /*   Read a scroll/spellbook */
  445. X      { &actsub[5], IDATA('t', T_t,    40) }, /*   Throw/shoot weapon */
  446. X      { &actsub[6], IDATA('z', T_z,    50) }, /*   Zap a wand */
  447. X      { &actsub[7], IDATA('Z', T_Z,    60) }, /*   Cast a spell */
  448. X!     { NULL    , IDATA('#', T_HASH, 70) }, /*   Extended command */
  449. X  };
  450. X  
  451. X  /* Preparations */
  452. X*** amiga/Old/amitty.c    Wed Sep 27 10:14:25 1989
  453. X--- amiga/amitty.c    Sun Sep 17 14:26:15 1989
  454. X***************
  455. X*** 4,9 ****
  456. X--- 4,10 ----
  457. X  /* tty.c - (Amiga) version */
  458. X  
  459. X  
  460. X+ #define NEED_VARARGS
  461. X  #include "hack.h"
  462. X  
  463. X  extern int Enable_Abort;
  464. X***************
  465. X*** 40,51 ****
  466. X  
  467. X  /* fatal error */
  468. X  /*VARARGS1*/
  469. X! void error(s,x,y)
  470. X! char *s;
  471. X! {
  472. X      end_screen();
  473. X      putchar('\n');
  474. X!     printf(s,x,y);
  475. X      putchar('\n');
  476. X      abort(1);
  477. X  }
  478. X--- 41,53 ----
  479. X  
  480. X  /* fatal error */
  481. X  /*VARARGS1*/
  482. X! void error VA_DECL(char *, s)
  483. X!     VA_START(s);
  484. X!     VA_INIT(s, char *);
  485. X      end_screen();
  486. X      putchar('\n');
  487. X!     vprintf(s,VA_ARGS);
  488. X      putchar('\n');
  489. X+     VA_END();
  490. X      abort(1);
  491. X  }
  492. X*** amiga/Old/amiwind.c    Wed Sep 27 10:14:45 1989
  493. X--- amiga/amiwind.c    Fri Sep 15 10:42:23 1989
  494. X***************
  495. X*** 10,16 ****
  496. X  
  497. X  #define MANX            /* Define for the Manx compiler */
  498. X  
  499. X- 
  500. X  #include <exec/types.h>
  501. X  #include <exec/alerts.h>
  502. X  #include <exec/io.h>
  503. X--- 10,15 ----
  504. X***************
  505. X*** 39,44 ****
  506. X--- 38,44 ----
  507. X  struct MenuItem *ItemAddress();
  508. X  struct Process *FindTask();         /* Cheating */
  509. X  long DeadKeyConvert(), OpenDevice(), CloseDevice();
  510. X+ struct MsgPort *CreatePort();
  511. X  extern struct Library *IconBase;
  512. X  void abort();
  513. X  
  514. X***************
  515. X*** 100,106 ****
  516. X      TOPAZ_EIGHTY, FS_NORMAL, FPF_DISKFONT | FPF_ROMFONT
  517. X  };
  518. X  
  519. X- 
  520. X  #define BARHEIGHT    11
  521. X  #define WINDOWHEIGHT    192
  522. X  #define WIDTH        640
  523. X--- 100,105 ----
  524. X***************
  525. X*** 124,130 ****
  526. X  #ifdef MAIL
  527. X                | DISKINSERTED
  528. X  #endif
  529. X- 
  530. X      , BORDERLESS | BACKDROP | ACTIVATE,
  531. X      NULL, NULL, NULL,
  532. X      NULL, NULL, -1,-1,-1,-1, CUSTOMSCREEN
  533. X--- 123,128 ----
  534. X***************
  535. X*** 178,189 ****
  536. X  
  537. X      control = (qualifier &  IEQUALIFIER_CONTROL) != 0;
  538. X      shift   = (qualifier & (IEQUALIFIER_LSHIFT | IEQUALIFIER_RSHIFT)) != 0;
  539. X  
  540. X      /*
  541. X!      *    Shortcut for HELP and arrow keys... I suppose this is allowed...
  542. X!      *    the defines are in intuition/intuition.h, and the keys
  543. X!      *    don't serve 'text' input, normally.
  544. X!      *    Also, parsing their escape sequences is such a mess...
  545. X       */
  546. X  
  547. X      switch (message->Code) {
  548. X--- 176,191 ----
  549. X  
  550. X      control = (qualifier &  IEQUALIFIER_CONTROL) != 0;
  551. X      shift   = (qualifier & (IEQUALIFIER_LSHIFT | IEQUALIFIER_RSHIFT)) != 0;
  552. X+     alt     = (qualifier & (IEQUALIFIER_LALT   | IEQUALIFIER_RALT  )) != 0;
  553. X+     /* Allow ALT to function as a META key ... */
  554. X+     qualifier &= ~(IEQUALIFIER_LALT | IEQUALIFIER_RALT);
  555. X+     numeric_pad = (qualifier & IEQUALIFIER_NUMERICPAD) != 0;
  556. X  
  557. X      /*
  558. X!      *    Shortcut for HELP and arrow keys. I suppose this is allowed.
  559. X!      *    The defines are in intuition/intuition.h, and the keys don't
  560. X!      *    serve 'text' input, normally. Also, parsing their escape
  561. X!      *    sequences is such a mess...
  562. X       */
  563. X  
  564. X      switch (message->Code) {
  565. X***************
  566. X*** 199,208 ****
  567. X      case CURSORRIGHT:
  568. X      length = 'l';
  569. X      arrow:
  570. X!     if (control)
  571. X!         length &= 0x1F;        /* ToControl... */
  572. X!     else if (shift)
  573. X!         length &= 0x5F;        /* ToUpper... */
  574. X      no_arrow:
  575. X      BufferQueueChar(length);
  576. X      return;
  577. X--- 201,208 ----
  578. X      case CURSORRIGHT:
  579. X      length = 'l';
  580. X      arrow:
  581. X!     if (!flags.num_pad)    /* Give digits if set, letters otherwise */
  582. X!         goto wasarrow;
  583. X      no_arrow:
  584. X      BufferQueueChar(length);
  585. X      return;
  586. X***************
  587. X*** 215,225 ****
  588. X      }
  589. X  #endif
  590. X  
  591. X-     numeric_pad = (qualifier & IEQUALIFIER_NUMERICPAD) != 0;
  592. X-     if (alt = (qualifier & (IEQUALIFIER_LALT | IEQUALIFIER_RALT)) != 0)
  593. X-         /* Don't want dead keys... */
  594. X-     qualifier &= ~(IEQUALIFIER_LALT | IEQUALIFIER_RALT);
  595. X- 
  596. X      theEvent.ie_Class = IECLASS_RAWKEY;
  597. X      theEvent.ie_Code = message->Code;
  598. X      theEvent.ie_Qualifier = numeric_pad ? IEQUALIFIER_NUMERICPAD :
  599. X--- 215,220 ----
  600. X***************
  601. X*** 230,236 ****
  602. X  
  603. X      if (length == 1) {   /* Plain ASCII character */
  604. X      length = buffer[0];
  605. X!     if (numeric_pad && length >= '1' && length <= '9') {
  606. X          length -= '1';
  607. X          if (control) {
  608. X          length = ctrl_numpad[length];
  609. X--- 225,232 ----
  610. X  
  611. X      if (length == 1) {   /* Plain ASCII character */
  612. X      length = buffer[0];
  613. X!     if (!flags.num_pad && numeric_pad && length >= '1' && length <= '9') {
  614. X! wasarrow:
  615. X          length -= '1';
  616. X          if (control) {
  617. X          length = ctrl_numpad[length];
  618. X***************
  619. X*** 240,245 ****
  620. X--- 236,243 ----
  621. X          length = numpad[length];
  622. X          }
  623. X      }
  624. X+     if (alt)
  625. X+         length |= 0x80;
  626. X      BufferQueueChar(length);
  627. X      } /* else shift, ctrl, alt, amiga, F-key, shift-tab, etc */
  628. X  }
  629. X***************
  630. X*** 314,321 ****
  631. X  
  632. X  int WindowGetchar()
  633. X  {
  634. X!     while ( !kbhit() ) {
  635. X!     Wait( 1L << HackWindow->UserPort->mp_SigBit );
  636. X      }
  637. X      return BufferGetchar();
  638. X  }
  639. X--- 312,319 ----
  640. X  
  641. X  int WindowGetchar()
  642. X  {
  643. X!     while (!kbhit()) {
  644. X!     WaitPort(HackWindow->UserPort);
  645. X      }
  646. X      return BufferGetchar();
  647. X  }
  648. X***************
  649. X*** 346,352 ****
  650. X   *  Queue a single character for output to the console screen.
  651. X   */
  652. X  
  653. X! int WindowPutchar(c)
  654. X  char c;
  655. X  {
  656. X      if (Buffered >= CONBUFFER)
  657. X--- 344,350 ----
  658. X   *  Queue a single character for output to the console screen.
  659. X   */
  660. X  
  661. X! void WindowPutchar(c)
  662. X  char c;
  663. X  {
  664. X      if (Buffered >= CONBUFFER)
  665. X***************
  666. X*** 429,434 ****
  667. X--- 427,434 ----
  668. X      CloseDevice(&ConsoleIO);
  669. X      ConsoleDevice = NULL;
  670. X      }
  671. X+     if (ConsoleIO.io_Message.mn_ReplyPort)
  672. X+     DeletePort(ConsoleIO.io_Message.mn_ReplyPort);
  673. X      if (HackWindow) {
  674. X      register struct IntuiMessage *msg;
  675. X  
  676. X***************
  677. X*** 561,566 ****
  678. X--- 561,567 ----
  679. X  
  680. X      ConsoleIO.io_Data = (APTR) HackWindow;
  681. X      ConsoleIO.io_Length = sizeof(*HackWindow);
  682. X+     ConsoleIO.io_Message.mn_ReplyPort = CreatePort(NULL, 0L);
  683. X      if (OpenDevice("console.device", 0L, &ConsoleIO, 0L) != 0)
  684. X      abort(AG_OpenDev | AO_ConsoleDev);
  685. X  
  686. X*** amiga/Old/stdio.h    Wed Sep 27 10:15:22 1989
  687. X--- amiga/stdio.h    Thu Sep 14 23:31:10 1989
  688. X***************
  689. X*** 56,61 ****
  690. X--- 56,63 ----
  691. X  FILE *freopen();
  692. X  char *gets();
  693. X  
  694. X+ typedef long off_t;
  695. X+ 
  696. X  #define getchar()   WindowGetchar()
  697. X  #define putchar(c)  WindowPutchar(c)
  698. X  #define puts(s)     WindowPuts(s)
  699. X***************
  700. X*** 63,69 ****
  701. X  #define printf      WindowPrintf
  702. X  #define fflush(fp)  WindowFlush()
  703. X  
  704. X! #define xputs(s)    WindowFPuts(s)
  705. X! #define xputc(c)    WindowPutchar(c)
  706. X  
  707. X  #endif
  708. X--- 65,71 ----
  709. X  #define printf      WindowPrintf
  710. X  #define fflush(fp)  WindowFlush()
  711. X  
  712. X! #define xputs        WindowFPuts
  713. X! #define xputc        WindowPutchar
  714. X  
  715. X  #endif
  716. X*** amiga/Old/ami.lnk    Wed Sep 27 10:12:59 1989
  717. X--- amiga/ami.lnk    Thu Sep 14 23:26:35 1989
  718. X***************
  719. X*** 1,15 ****
  720. X- -w
  721. X  -o Ram:NetHack
  722. X  +ss
  723. X! amidos.o amitcap.o amitty.o amiunix.o amiwind.o alloc.o apply.o artifact.o
  724. X! attrib.o bones.o cmd.o dbridge.o decl.o demon.o do.o do_name.o do_wear.o
  725. X! dog.o dogmove.o dothrow.o eat.o end.o engrave.o exper.o extralev.o
  726. X! fountain.o hack.o invent.o lock.o main.o makemon.o mcastu.o mhitm.o mhitu.o
  727. X! mklev.o mkmaze.o mkobj.o mkshop.o mon.o mondata.o monmove.o monst.o
  728. X! mthrowu.o music.o o_init.o objects.o objnam.o options.o pager.o pickup.o
  729. X! polyself.o potion.o pray.o pri.o prisym.o random.o read.o restore.o rip.o
  730. X! rnd.o rumors.o save.o search.o shk.o shknam.o sit.o sounds.o sp_lev.o
  731. X! spell.o steal.o timeout.o topl.o topten.o track.o trap.o u_init.o uhitm.o
  732. X! vault.o version.o weapon.o were.o wield.o wizard.o worm.o worn.o write.o
  733. X! zap.o
  734. X  -lml -lcl
  735. X--- 1,14 ----
  736. X  -o Ram:NetHack
  737. X  +ss
  738. X! allmain.o alloc.o amidos.o amitcap.o amitty.o amiunix.o amiwind.o apply.o
  739. X! artifact.o attrib.o bones.o cmd.o dbridge.o decl.o demon.o do.o dog.o dogmove.o
  740. X! dokick.o dothrow.o do_name.o do_wear.o eat.o end.o engrave.o exper.o
  741. X! extralev.o fountain.o getline.o hack.o invent.o lock.o mail.o main.o
  742. X! makemon.o mcastu.o mhitm.o mhitu.o mklev.o mkmaze.o mkobj.o mkroom.o mon.o
  743. X! mondata.o monmove.o monst.o mthrowu.o music.o objects.o objnam.o options.o
  744. X! o_init.o pager.o pickup.o polyself.o potion.o pray.o pri.o priest.o
  745. X! prisym.o random.o read.o restore.o rip.o rnd.o rumors.o save.o search.o
  746. X! shk.o shknam.o sit.o sounds.o spell.o sp_lev.o steal.o timeout.o topl.o
  747. X! topten.o track.o trap.o uhitm.o u_init.o vault.o version.o weapon.o were.o
  748. X! wield.o wizard.o worm.o worn.o write.o zap.o
  749. X  -lml -lcl
  750. X*** others/Old/Makefile.msc    Wed Sep 27 10:20:04 1989
  751. X--- others/Makefile.msc    Wed Sep 27 09:39:19 1989
  752. X***************
  753. X*** 47,54 ****
  754. X  # other things that have to be reconfigured are in config.h,
  755. X  # {unixconf.h, pcconf.h, tosconf.h}, and possibly system.h
  756. X  
  757. X! VOBJ =    o\alloc.o o\apply.o o\artifact.o o\attrib.o o\bones.o o\cmd.o \
  758. X!     o\dbridge.o o\decl.o o\demon.o o\do.o o\do_name.o o\do_wear.o \
  759. X      o\dog.o o\dogmove.o o\dokick.o o\dothrow.o o\eat.o o\end.o o\engrave.o \
  760. X      o\exper.o o\extralev.o o\fountain.o o\getline.o o\hack.o o\invent.o \
  761. X      o\lock.o o\mail.o o\main.o o\makemon.o o\mcastu.o o\mhitm.o o\mhitu.o \
  762. X--- 47,54 ----
  763. X  # other things that have to be reconfigured are in config.h,
  764. X  # {unixconf.h, pcconf.h, tosconf.h}, and possibly system.h
  765. X  
  766. X! VOBJ =    o\allmain.o o\alloc.o o\apply.o o\artifact.o o\attrib.o o\bones.o \
  767. X!     o\cmd.o o\dbridge.o o\decl.o o\demon.o o\do.o o\do_name.o o\do_wear.o \
  768. X      o\dog.o o\dogmove.o o\dokick.o o\dothrow.o o\eat.o o\end.o o\engrave.o \
  769. X      o\exper.o o\extralev.o o\fountain.o o\getline.o o\hack.o o\invent.o \
  770. X      o\lock.o o\mail.o o\main.o o\makemon.o o\mcastu.o o\mhitm.o o\mhitu.o \
  771. X***************
  772. X*** 230,235 ****
  773. X--- 230,236 ----
  774. X  
  775. X  # GO AHEAD, DELETE THIS LINE
  776. X  
  777. X+ o\allmain.o:  $(HACK_H)
  778. X  o\alloc.o:  $(CONFIG_H)
  779. X  o\apply.o:  $(HACK_H) $(INCL)\edog.h
  780. X  o\artifact.o:  $(HACK_H) $(INCL)\artifact.h
  781. X*** others/Old/Makefile.os2    Wed Sep 27 10:20:19 1989
  782. X--- others/Makefile.os2    Wed Sep 27 09:40:24 1989
  783. X***************
  784. X*** 88,95 ****
  785. X  # other things that have to be reconfigured are in config.h,
  786. X  # {unixconf.h, pcconf.h, tosconf.h}, and possibly system.h
  787. X  
  788. X! VOBJ =    o\alloc.o o\apply.o o\artifact.o o\attrib.o o\bones.o o\cmd.o \
  789. X!     o\dbridge.o o\decl.o o\demon.o o\do.o o\do_name.o o\do_wear.o \
  790. X      o\dog.o o\dogmove.o o\dokick.o o\dothrow.o o\eat.o o\end.o o\engrave.o \
  791. X      o\exper.o o\extralev.o o\fountain.o o\getline.o o\hack.o o\invent.o \
  792. X      o\lock.o o\mail.o o\main.o o\makemon.o o\mcastu.o o\mhitm.o o\mhitu.o \
  793. X--- 88,95 ----
  794. X  # other things that have to be reconfigured are in config.h,
  795. X  # {unixconf.h, pcconf.h, tosconf.h}, and possibly system.h
  796. X  
  797. X! VOBJ =    o\allmain.o o\alloc.o o\apply.o o\artifact.o o\attrib.o o\bones.o \
  798. X!     o\cmd.o o\dbridge.o o\decl.o o\demon.o o\do.o o\do_name.o o\do_wear.o \
  799. X      o\dog.o o\dogmove.o o\dokick.o o\dothrow.o o\eat.o o\end.o o\engrave.o \
  800. X      o\exper.o o\extralev.o o\fountain.o o\getline.o o\hack.o o\invent.o \
  801. X      o\lock.o o\mail.o o\main.o o\makemon.o o\mcastu.o o\mhitm.o o\mhitu.o \
  802. X***************
  803. X*** 245,250 ****
  804. X--- 245,251 ----
  805. X  
  806. X  # GO AHEAD, DELETE THIS LINE
  807. X  
  808. X+ o\allmain.o:  $(HACK_H)
  809. X  o\alloc.o:  $(CONFIG_H)
  810. X  o\apply.o:  $(HACK_H) $(INCL)\edog.h
  811. X  o\artifact.o:  $(HACK_H) $(INCL)\artifact.h
  812. X*** others/Old/Makefile.st    Wed Sep 27 10:20:52 1989
  813. X--- others/Makefile.st    Wed Sep 27 09:30:11 1989
  814. X***************
  815. X*** 56,62 ****
  816. X  # other things that have to be reconfigured are in config.h,
  817. X  # {unixconf.h, pcconf.h, tosconf.h}, and possibly system.h
  818. X  
  819. X! VOBJ = alloc.o apply.o artifact.o attrib.o bones.o cmd.o dbridge.o decl.o \
  820. X      demon.o do.o do_name.o do_wear.o dog.o dogmove.o dokick.o dothrow.o \
  821. X       eat.o end.o engrave.o exper.o extralev.o fountain.o getline.o hack.o \
  822. X      invent.o lock.o main.o makemon.o mcastu.o mhitm.o \
  823. X--- 56,63 ----
  824. X  # other things that have to be reconfigured are in config.h,
  825. X  # {unixconf.h, pcconf.h, tosconf.h}, and possibly system.h
  826. X  
  827. X! VOBJ = allmain.o alloc.o apply.o artifact.o attrib.o bones.o cmd.o \
  828. X!     dbridge.o decl.o \
  829. X      demon.o do.o do_name.o do_wear.o dog.o dogmove.o dokick.o dothrow.o \
  830. X       eat.o end.o engrave.o exper.o extralev.o fountain.o getline.o hack.o \
  831. X      invent.o lock.o main.o makemon.o mcastu.o mhitm.o \
  832. X***************
  833. X*** 211,216 ****
  834. X--- 212,218 ----
  835. X  
  836. X  # GO AHEAD, DELETE THIS LINE
  837. X  
  838. X+ allmain.o: $(HACK_H)
  839. X  alloc.o:  $(CONFIG_H)
  840. X  apply.o:  $(HACK_H) $(INCL)\edog.h
  841. X  artifact.o:  $(HACK_H) $(INCL)\artifact.h
  842. X*** others/Old/Makefile.tcc    Wed Sep 27 10:21:14 1989
  843. X--- others/Makefile.tcc    Wed Sep 27 09:42:50 1989
  844. X***************
  845. X*** 16,22 ****
  846. X  # no stack frame.
  847. X  # Note: There is a bug in Turbo C 2.0's -Z.  If you have weird problems,
  848. X  #    use -Z-.
  849. X! CFLAGS    = -m$(MODEL) -I$(INCL) $(WIZARD) -K- -O -A -Z -k- -w-pia -w-pro
  850. X  CC    = tcc
  851. X  
  852. X  TARG    = pc
  853. X--- 16,22 ----
  854. X  # no stack frame.
  855. X  # Note: There is a bug in Turbo C 2.0's -Z.  If you have weird problems,
  856. X  #    use -Z-.
  857. X! CFLAGS    = -c -no -m$(MODEL) -I$(INCL) -K- -O -A -Z -k- -w-pia -w-pro $(WIZARD)
  858. X  CC    = tcc
  859. X  
  860. X  TARG    = pc
  861. X***************
  862. X*** 30,36 ****
  863. X  #     High-quality BSD random number generation routines.
  864. X  RANDOM = o\random.obj
  865. X  
  866. X! LFLAGS    = /noi
  867. X  TLFLAGS = /x/c
  868. X  # No need to link in the floating point library
  869. X  LIBS    = $(LIB)\c$(MODEL)
  870. X--- 30,36 ----
  871. X  #     High-quality BSD random number generation routines.
  872. X  RANDOM = o\random.obj
  873. X  
  874. X! LFLAGS  = /noi
  875. X  TLFLAGS = /x/c
  876. X  # No need to link in the floating point library
  877. X  LIBS    = $(LIB)\c$(MODEL)
  878. X***************
  879. X*** 75,101 ****
  880. X  # other things that have to be reconfigured are in config.h,
  881. X  # {unixconf.h, pcconf.h, tosconf.h}, and possibly system.h
  882. X  
  883. X! VOBJS = o\main.obj o\tty.obj o\unix.obj o\hack.obj \
  884. X!     o\pri.obj o\prisym.obj o\topl.obj o\cmd.obj o\getline.obj \
  885. X!     o\decl.obj o\monst.obj o\objects.obj o\timeout.obj $(RANDOM) \
  886. X!     o\mkobj.obj o\makemon.obj o\mon.obj o\monmove.obj o\mondata.obj
  887. X! VOBJM = o\apply.obj o\artifact.obj o\attrib.obj o\bones.obj o\dbridge.obj \
  888. X!     o\demon.obj o\do.obj o\do_name.obj o\do_wear.obj o\dog.obj \
  889. X!     o\dogmove.obj o\dokick.obj o\dothrow.obj o\eat.obj o\engrave.obj \
  890. X!     o\exper.obj o\fountain.obj o\invent.obj o\lock.obj \
  891. X!     o\mcastu.obj o\mhitm.obj o\mhitu.obj o\msdos.obj o\mthrowu.obj \
  892. X!     o\music.obj o\objnam.obj o\options.obj o\pager.obj o\pickup.obj \
  893. X!     o\polyself.obj o\potion.obj o\pray.obj o\priest.obj o\read.obj \
  894. X!     o\restore.obj o\rip.obj o\rnd.obj o\rumors.obj o\save.obj \
  895. X!     o\search.obj o\shk.obj o\sit.obj o\sounds.obj o\spell.obj \
  896. X!     o\steal.obj o\termcap.obj o\track.obj o\trap.obj o\uhitm.obj \
  897. X      o\vault.obj o\weapon.obj o\were.obj o\wield.obj o\wizard.obj \
  898. X      o\worm.obj o\worn.obj o\write.obj o\zap.obj
  899. X! VOBJL = o\mklev.obj o\mkmaze.obj o\extralev.obj o\sp_lev.obj o\mkroom.obj \
  900. X!     o\shknam.obj o\topten.obj o\end.obj o\o_init.obj o\u_init.obj
  901. X! VOBJ  = $(VOBJS) $(VOBJM) $(VOBJL)
  902. X! HOBJ  = $(VOBJ) o\version.obj
  903. X  
  904. X  #
  905. X  # Weird order, isn't it?  It puts the most often used utility routines
  906. X  # and the main loop at the start of the file, and the routines that are
  907. X--- 75,103 ----
  908. X  # other things that have to be reconfigured are in config.h,
  909. X  # {unixconf.h, pcconf.h, tosconf.h}, and possibly system.h
  910. X  
  911. X! VOBJS = o\allmain.obj o\main.obj o\tty.obj o\unix.obj o\hack.obj o\termcap.obj \
  912. X!     o\getline.obj o\pri.obj o\prisym.obj o\topl.obj o\cmd.obj o\msdos.obj \
  913. X!     o\decl.obj o\monst.obj o\objects.obj \
  914. X!     o\timeout.obj $(RANDOM) o\rnd.obj \
  915. X!     o\monmove.obj o\dogmove.obj o\mondata.obj o\exper.obj o\mon.obj \
  916. X!     o\mhitu.obj o\uhitm.obj o\mkobj.obj o\makemon.obj o\invent.obj \
  917. X!     o\pager.obj o\restore.obj
  918. X! VOBJM = o\apply.obj o\artifact.obj o\attrib.obj o\dbridge.obj o\demon.obj \
  919. X!     o\do.obj o\do_name.obj o\do_wear.obj o\dog.obj o\dokick.obj \
  920. X!     o\dothrow.obj o\eat.obj o\lock.obj o\mcastu.obj o\mhitm.obj \
  921. X!     o\mthrowu.obj o\objnam.obj o\options.obj o\pickup.obj o\polyself.obj \
  922. X!     o\potion.obj o\pray.obj o\priest.obj o\read.obj o\search.obj \
  923. X!     o\shk.obj o\sit.obj o\sounds.obj o\steal.obj o\track.obj o\trap.obj \
  924. X      o\vault.obj o\weapon.obj o\were.obj o\wield.obj o\wizard.obj \
  925. X      o\worm.obj o\worn.obj o\write.obj o\zap.obj
  926. X! VOBJ1 = o\engrave.obj o\fountain.obj o\spell.obj o\rumors.obj o\music.obj
  927. X! VOBJ2 = o\save.obj o\mklev.obj o\mkmaze.obj o\extralev.obj \
  928. X!     o\sp_lev.obj o\mkroom.obj o\bones.obj o\shknam.obj
  929. X! VOBJL = o\topten.obj o\end.obj o\o_init.obj o\u_init.obj o\rip.obj
  930. X  
  931. X+ VOBJ  = $(VOBJS) $(VOBJM) $(VOBJ1) $(VOBJ2) $(VOBJL)
  932. X+ HOBJ  = $(VOBJS) $(VOBJM) $(VOBJ1) $(VOBJ2) o\version.obj $(VOBJL)
  933. X+ 
  934. X  #
  935. X  # Weird order, isn't it?  It puts the most often used utility routines
  936. X  # and the main loop at the start of the file, and the routines that are
  937. X***************
  938. X*** 134,140 ****
  939. X  $(GAME): $(GAMEFILE)
  940. X  
  941. X  .c.obj:
  942. X!     $(CC) $(CFLAGS) -c -no $<
  943. X  
  944. X  all:    o $(GAME) auxil
  945. X      @echo Done.
  946. X--- 136,142 ----
  947. X  $(GAME): $(GAMEFILE)
  948. X  
  949. X  .c.obj:
  950. X!     $(CC) $(CFLAGS) $<
  951. X  
  952. X  all:    o $(GAME) auxil
  953. X      @echo Done.
  954. X***************
  955. X*** 188,200 ****
  956. X  #    The following programs vary depending on what OS you are using.
  957. X  #
  958. X  o\main.obj:    $(HACK_H) $(TARG)main.c
  959. X!     $(CC) $(CFLAGS) -o$@ -c $(TARG)main.c
  960. X  
  961. X  o\tty.obj:    $(HACK_H) $(INCL)\func_tab.h $(TARG)tty.c
  962. X!     $(CC) $(CFLAGS) -o$@ -c $(TARG)tty.c
  963. X  
  964. X  o\unix.obj:    $(HACK_H) $(TARG)unix.c
  965. X!     $(CC) $(CFLAGS) -o$@ -c $(TARG)unix.c
  966. X  
  967. X  #
  968. X  # Secondary targets
  969. X--- 190,202 ----
  970. X  #    The following programs vary depending on what OS you are using.
  971. X  #
  972. X  o\main.obj:    $(HACK_H) $(TARG)main.c
  973. X!     $(CC) $(CFLAGS) -o$@ $(TARG)main.c
  974. X  
  975. X  o\tty.obj:    $(HACK_H) $(INCL)\func_tab.h $(TARG)tty.c
  976. X!     $(CC) $(CFLAGS) -o$@ $(TARG)tty.c
  977. X  
  978. X  o\unix.obj:    $(HACK_H) $(TARG)unix.c
  979. X!     $(CC) $(CFLAGS) -o$@ $(TARG)unix.c
  980. X  
  981. X  #
  982. X  # Secondary targets
  983. X***************
  984. X*** 239,244 ****
  985. X--- 241,247 ----
  986. X  
  987. X  # GO AHEAD, DELETE THIS LINE
  988. X  
  989. X+ o\allmain.obj:  $(HACK_H)
  990. X  o\alloc.obj:  $(CONFIG_H)
  991. X  o\apply.obj:  $(HACK_H) $(INCL)\edog.h
  992. X  o\artifact.obj:  $(HACK_H) $(INCL)\artifact.h
  993. X***************
  994. X*** 280,287 ****
  995. X  o\mondata.obj:  $(HACK_H) $(INCL)\eshk.h $(INCL)\epri.h
  996. X  o\monmove.obj:  $(HACK_H) $(INCL)\mfndpos.h $(INCL)\artifact.h
  997. X  o\monst.obj:  $(CONFIG_H) $(PERMONST_H) $(INCL)\eshk.h $(INCL)\vault.h $(INCL)\epri.h
  998. X! o\msdos.obj:  $(HACK_H)
  999. X!     $(CC) $(CFLAGS) -A- -oo\$*.obj -c $*.c
  1000. X  # set ANSI only off; many MS-DOS specific things.
  1001. X  o\mthrowu.obj:  $(HACK_H)
  1002. X  o\music.obj:  $(HACK_H)
  1003. X--- 283,290 ----
  1004. X  o\mondata.obj:  $(HACK_H) $(INCL)\eshk.h $(INCL)\epri.h
  1005. X  o\monmove.obj:  $(HACK_H) $(INCL)\mfndpos.h $(INCL)\artifact.h
  1006. X  o\monst.obj:  $(CONFIG_H) $(PERMONST_H) $(INCL)\eshk.h $(INCL)\vault.h $(INCL)\epri.h
  1007. X! o\msdos.obj:  $(HACK_H) msdos.c
  1008. X!     $(CC) $(CFLAGS) -A- $*.c
  1009. X  # set ANSI only off; many MS-DOS specific things.
  1010. X  o\mthrowu.obj:  $(HACK_H)
  1011. X  o\music.obj:  $(HACK_H)
  1012. X***************
  1013. X*** 301,308 ****
  1014. X  o\random.obj:
  1015. X  o\read.obj:  $(HACK_H)
  1016. X  o\restore.obj:  $(HACK_H) $(INCL)\lev.h $(INCL)\wseg.h
  1017. X! o\rip.obj:  $(HACK_H)
  1018. X!     $(CC) $(CFLAGS) -d- -oo\$*.obj -c $*.c
  1019. X  # must not merge strings, or the tombstone lines will overlap.
  1020. X  o\rnd.obj:  $(HACK_H)
  1021. X  o\rumors.obj:  $(HACK_H)
  1022. X--- 304,311 ----
  1023. X  o\random.obj:
  1024. X  o\read.obj:  $(HACK_H)
  1025. X  o\restore.obj:  $(HACK_H) $(INCL)\lev.h $(INCL)\wseg.h
  1026. X! o\rip.obj:  $(HACK_H) rip.c
  1027. X!     $(CC) $(CFLAGS) -d- $*.c
  1028. X  # must not merge strings, or the tombstone lines will overlap.
  1029. X  o\rnd.obj:  $(HACK_H)
  1030. X  o\rumors.obj:  $(HACK_H)
  1031. X*** others/Old/msdos.c    Wed Sep 27 10:22:01 1989
  1032. X--- others/msdos.c    Mon Sep 18 12:18:41 1989
  1033. X***************
  1034. X*** 3,8 ****
  1035. X--- 3,9 ----
  1036. X  /* An assortment of MSDOS functions.
  1037. X   */
  1038. X  
  1039. X+ #define NEED_VARARGS
  1040. X  #include "hack.h"
  1041. X  #ifdef MSDOS
  1042. X  # ifdef TOS
  1043. X***************
  1044. X*** 97,103 ****
  1045. X      char *comspec;
  1046. X  
  1047. X      if (comspec = getcomspec()) {
  1048. X! #ifdef DGK
  1049. X          settty("To return to NetHack, enter \"exit\" at the DOS prompt.\n");
  1050. X  #else
  1051. X          settty((char *)0);
  1052. X--- 98,104 ----
  1053. X      char *comspec;
  1054. X  
  1055. X      if (comspec = getcomspec()) {
  1056. X! #if defined(DGK) && !defined(TOS)    /* TOS has a variety of shells */
  1057. X          settty("To return to NetHack, enter \"exit\" at the DOS prompt.\n");
  1058. X  #else
  1059. X          settty((char *)0);
  1060. X***************
  1061. X*** 131,137 ****
  1062. X   * Shift characters are output when either shift key is pushed.
  1063. X   */
  1064. X  #ifdef TOS
  1065. X! #define KEYPADLO    0x67
  1066. X  #define KEYPADHI    0x71
  1067. X  #else
  1068. X  #define KEYPADLO    0x47
  1069. X--- 132,138 ----
  1070. X   * Shift characters are output when either shift key is pushed.
  1071. X   */
  1072. X  #ifdef TOS
  1073. X! #define KEYPADLO    0x61
  1074. X  #define KEYPADHI    0x71
  1075. X  #else
  1076. X  #define KEYPADLO    0x47
  1077. X***************
  1078. X*** 144,149 ****
  1079. X--- 145,158 ----
  1080. X  static const struct pad {
  1081. X      char normal, shift;
  1082. X      } keypad[PADKEYS] = {
  1083. X+ #ifdef TOS
  1084. X+             {C('['), 'Q'},        /* UNDO */
  1085. X+             {'?', '/'},        /* HELP */
  1086. X+             {'(', 'a'},        /* ( */
  1087. X+             {')', 'w'},        /* ) */
  1088. X+             {'/', '/'},        /* / */
  1089. X+             {C('p'), '$'},        /* * */
  1090. X+ #endif
  1091. X              {'y', 'Y'},        /* 7 */
  1092. X              {'k', 'K'},        /* 8 */
  1093. X              {'u', 'U'},        /* 9 */
  1094. X***************
  1095. X*** 166,171 ****
  1096. X--- 175,188 ----
  1097. X              {'i', 'I'},        /* Ins */
  1098. X              {'.', ':'}        /* Del */
  1099. X      }, numpad[PADKEYS] = {
  1100. X+ #ifdef TOS
  1101. X+             {C('['), 'Q'}    ,    /* UNDO */
  1102. X+             {'?', '/'},        /* HELP */
  1103. X+             {'(', 'a'},        /* ( */
  1104. X+             {')', 'w'},        /* ) */
  1105. X+             {'/', '/'},        /* / */
  1106. X+             {C('p'), '$'},        /* * */
  1107. X+ #endif
  1108. X              {'7', M('7')},        /* 7 */
  1109. X              {'8', M('8')},        /* 8 */
  1110. X              {'9', M('9')},        /* 9 */
  1111. X***************
  1112. X*** 196,201 ****
  1113. X--- 213,226 ----
  1114. X   * table to translate the scan codes into letters, then set the
  1115. X   * "meta" bit for them.  -3.
  1116. X   */
  1117. X+ /*
  1118. X+  * An addition to the above text: If a DOS or OS/2 keyboard conversion
  1119. X+  * table is in effect (almost always so outside of US), pressing ALT-letter
  1120. X+  * may indeed return a character which must be taken into account as a
  1121. X+  * character command instead of a metacommand. When an ALT-letter is pressed,
  1122. X+  * it is checked whether the character code is something else than a 0, and
  1123. X+  * if so, it is interpreted as a valid character command. (TH)
  1124. X+  */
  1125. X  #ifdef MSDOS
  1126. X  #define SCANLO        0x10
  1127. X  #define SCANHI        0x32
  1128. X***************
  1129. X*** 273,279 ****
  1130. X              ch = (*kpad)[scan - KEYPADLO].normal;
  1131. X      }
  1132. X      if (shift & ALT) {
  1133. X!         if (!ch && inmap(scan))
  1134. X              ch = scanmap[scan - SCANLO];
  1135. X          return (isprint(ch) ? M(ch) : ch);
  1136. X      }
  1137. X--- 298,305 ----
  1138. X              ch = (*kpad)[scan - KEYPADLO].normal;
  1139. X      }
  1140. X      if (shift & ALT) {
  1141. X!         if (ch) return ch;     /* because of multilingual keyboards (TH) */
  1142. X!         else if (inmap(scan))
  1143. X              ch = scanmap[scan - SCANLO];
  1144. X          return (isprint(ch) ? M(ch) : ch);
  1145. X      }
  1146. X***************
  1147. X*** 824,830 ****
  1148. X              int lth;
  1149. X  
  1150. X               if ((lth = sscanf(bufp,
  1151. X!          "%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d",
  1152. X                  &translate[0], &translate[1], &translate[2],
  1153. X                  &translate[3], &translate[4], &translate[5],
  1154. X                  &translate[6], &translate[7], &translate[8],
  1155. X--- 850,856 ----
  1156. X              int lth;
  1157. X  
  1158. X               if ((lth = sscanf(bufp,
  1159. X!      "%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d",
  1160. X                  &translate[0], &translate[1], &translate[2],
  1161. X                  &translate[3], &translate[4], &translate[5],
  1162. X                  &translate[6], &translate[7], &translate[8],
  1163. X***************
  1164. X*** 912,923 ****
  1165. X  }
  1166. X  
  1167. X  void
  1168. X! msmsg(fmt, a1, a2, a3)
  1169. X! char *fmt;
  1170. X! long a1, a2, a3;
  1171. X! {
  1172. X!     Printf(fmt, a1, a2, a3);
  1173. X      flushout();
  1174. X      return;
  1175. X  }
  1176. X  
  1177. X--- 938,949 ----
  1178. X  }
  1179. X  
  1180. X  void
  1181. X! msmsg VA_DECL(char *, fmt)
  1182. X!     VA_START(fmt);
  1183. X!     VA_INIT(fmt, char *);
  1184. X!     Vprintf(fmt, VA_ARGS);
  1185. X      flushout();
  1186. X+     VA_END();
  1187. X      return;
  1188. X  }
  1189. X  
  1190. X***************
  1191. X*** 1132,1137 ****
  1192. X--- 1158,1165 ----
  1193. X  #ifdef TOS
  1194. X      if (run_from_desktop)
  1195. X          getreturn("to continue"); /* so the user can read the score list */
  1196. X+     if (flags.IBMBIOS && flags.use_color)
  1197. X+         restore_colors();
  1198. X  #endif
  1199. X      exit(code);
  1200. X      return;
  1201. X***************
  1202. X*** 1218,1222 ****
  1203. X--- 1246,1269 ----
  1204. X  int kbhit()
  1205. X  {
  1206. X      return Cconis();
  1207. X+ }
  1208. X+ 
  1209. X+ static unsigned orig_color[4] = {-1, -1, -1, -1};
  1210. X+ static unsigned new_color[4] = { 0x0, 0x730, 0x047, 0x555 };
  1211. X+ 
  1212. X+ void set_colors()
  1213. X+ {
  1214. X+     int i;
  1215. X+ 
  1216. X+     for (i = 0; i < 4; i++)
  1217. X+         orig_color[i] = Setcolor(i, new_color[i]);
  1218. X+ }
  1219. X+ 
  1220. X+ void restore_colors()
  1221. X+ {
  1222. X+     int i;
  1223. X+ 
  1224. X+     for (i = 0; i < 4; i++)
  1225. X+         (void) Setcolor(i, orig_color[i]);
  1226. X  }
  1227. X  #endif /* TOS */
  1228. X*** others/Old/oldtos.c    Wed Sep 27 10:22:45 1989
  1229. X--- others/oldtos.c    Thu Sep 14 20:54:31 1989
  1230. X***************
  1231. X*** 442,448 ****
  1232. X              int lth;
  1233. X  
  1234. X               if ((lth = sscanf(bufp,
  1235. X!              "%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d",
  1236. X                  &translate[0], &translate[1], &translate[2],
  1237. X                  &translate[3], &translate[4], &translate[5],
  1238. X                  &translate[6], &translate[7], &translate[8],
  1239. X--- 442,448 ----
  1240. X              int lth;
  1241. X  
  1242. X               if ((lth = sscanf(bufp,
  1243. X!          "%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d",
  1244. X                  &translate[0], &translate[1], &translate[2],
  1245. X                  &translate[3], &translate[4], &translate[5],
  1246. X                  &translate[6], &translate[7], &translate[8],
  1247. X*** others/Old/pcmain.c    Wed Sep 27 10:23:06 1989
  1248. X--- others/pcmain.c    Tue Sep 26 18:48:59 1989
  1249. X***************
  1250. X*** 4,21 ****
  1251. X  /* main.c - PC, ST, and Amiga NetHack */
  1252. X  
  1253. X  #include "hack.h"
  1254. X  #ifndef NO_SIGNAL
  1255. X  #include <signal.h>
  1256. X  #endif
  1257. X  
  1258. X  char orgdir[PATHLEN];
  1259. X! 
  1260. X! extern struct permonst mons[NUMMONS];
  1261. X! extern char plname[PL_NSIZ], pl_character[PL_CSIZ];
  1262. X  
  1263. X! int (*afternmv)(), (*occupation)();
  1264. X! static void moveloop();    /* a helper function for MSC optimizer */
  1265. X! static void newgame();
  1266. X  
  1267. X  #if defined(DGK) && !defined(OLD_TOS)
  1268. X  struct finfo    zfinfo = ZFINFO;
  1269. X--- 4,22 ----
  1270. X  /* main.c - PC, ST, and Amiga NetHack */
  1271. X  
  1272. X  #include "hack.h"
  1273. X+ 
  1274. X  #ifndef NO_SIGNAL
  1275. X  #include <signal.h>
  1276. X  #endif
  1277. X  
  1278. X  char orgdir[PATHLEN];
  1279. X! char SAVEF[FILENAME];
  1280. X  
  1281. X! char *hname = "NetHack";    /* used for syntax messages */
  1282. X! #ifndef AMIGA
  1283. X! char obuf[BUFSIZ];    /* BUFSIZ is defined in stdio.h */
  1284. X! #endif
  1285. X! int hackpid;        /* not used anymore, but kept in for save files */
  1286. X  
  1287. X  #if defined(DGK) && !defined(OLD_TOS)
  1288. X  struct finfo    zfinfo = ZFINFO;
  1289. X***************
  1290. X*** 22,34 ****
  1291. X  int i;
  1292. X  #endif /* DGK && !OLD_TOS */
  1293. X  
  1294. X- char SAVEF[FILENAME];
  1295. X- char *hname = "NetHack";    /* used for syntax messages */
  1296. X- char obuf[BUFSIZ];    /* BUFSIZ is defined in stdio.h */
  1297. X- int hackpid;        /* not used anymore, but kept in for save files */
  1298. X- 
  1299. X- extern char *nomovemsg;
  1300. X- extern long wailmsg;
  1301. X  #ifdef __TURBOC__    /* tell Turbo C to make a bigger stack */
  1302. X  extern unsigned _stklen = 0x2000;    /* 8K */
  1303. X  extern unsigned char _osmajor;
  1304. X--- 23,28 ----
  1305. X***************
  1306. X*** 77,84 ****
  1307. X       *  Initialize screen I/O before anything is displayed.
  1308. X       *
  1309. X       *  startup() must be called before initoptions()
  1310. X!      *  due to ordering of graphics settings, and before
  1311. X!      *  any calls to error() due to use of termcap strings.
  1312. X       */
  1313. X      gettty();
  1314. X  #ifndef AMIGA
  1315. X--- 71,78 ----
  1316. X       *  Initialize screen I/O before anything is displayed.
  1317. X       *
  1318. X       *  startup() must be called before initoptions()
  1319. X!      *    due to ordering of graphics settings
  1320. X!      *  and before error(), due to use of termcap strings.
  1321. X       */
  1322. X      gettty();
  1323. X  #ifndef AMIGA
  1324. X***************
  1325. X*** 114,128 ****
  1326. X  #endif /* DGK && !OLD_TOS */
  1327. X  
  1328. X      initoptions();
  1329. X      if (!hackdir[0])
  1330. X          Strcpy(hackdir, orgdir);
  1331. X  
  1332. X      if(argc > 1) {
  1333. X! #ifdef TOS
  1334. X!         if(!strncmp(argv[1], "-D", 2)) {
  1335. X! #else
  1336. X!         if(!strncmp(argv[1], "-d", 2)) {
  1337. X! #endif
  1338. X          argc--;
  1339. X          argv++;
  1340. X          dir = argv[0]+2;
  1341. X--- 108,122 ----
  1342. X  #endif /* DGK && !OLD_TOS */
  1343. X  
  1344. X      initoptions();
  1345. X+ #ifdef TOS
  1346. X+     if (flags.IBMBIOS && flags.use_color)
  1347. X+         set_colors();
  1348. X+ #endif
  1349. X      if (!hackdir[0])
  1350. X          Strcpy(hackdir, orgdir);
  1351. X  
  1352. X      if(argc > 1) {
  1353. X!         if (!strncmp(argv[1], "-d", 2)) {
  1354. X          argc--;
  1355. X          argv++;
  1356. X          dir = argv[0]+2;
  1357. X***************
  1358. X*** 135,151 ****
  1359. X          if(!*dir)
  1360. X              error("Flag -d must be followed by a directory name.");
  1361. X          Strcpy(hackdir, dir);
  1362. X!         }
  1363. X  
  1364. X      /*
  1365. X       * Now we know the directory containing 'record' and
  1366. X       * may do a prscore().
  1367. X       */
  1368. X! #ifdef TOS
  1369. X!         else if (!strncmp(argv[1], "-S", 2)) {
  1370. X! #else
  1371. X!         else if (!strncmp(argv[1], "-s", 2)) {
  1372. X! #endif
  1373. X  #ifdef CHDIR
  1374. X          chdirx(hackdir,0);
  1375. X  #endif
  1376. X--- 129,141 ----
  1377. X          if(!*dir)
  1378. X              error("Flag -d must be followed by a directory name.");
  1379. X          Strcpy(hackdir, dir);
  1380. X!         } else
  1381. X  
  1382. X      /*
  1383. X       * Now we know the directory containing 'record' and
  1384. X       * may do a prscore().
  1385. X       */
  1386. X!         if (!strncmp(argv[1], "-s", 2)) {
  1387. X  #ifdef CHDIR
  1388. X          chdirx(hackdir,0);
  1389. X  #endif
  1390. X***************
  1391. X*** 154,159 ****
  1392. X--- 144,152 ----
  1393. X          }
  1394. X      }
  1395. X  
  1396. X+     /*
  1397. X+      * It seems you really want to play.
  1398. X+      */
  1399. X      setrandom();
  1400. X      cls();
  1401. X      u.uhp = 1;    /* prevent RIP on early quits */
  1402. X***************
  1403. X*** 182,218 ****
  1404. X          argc--;
  1405. X          switch(argv[0][1]){
  1406. X  #if defined(WIZARD) || defined(EXPLORE_MODE)
  1407. X! # ifndef TOS
  1408. X!         case 'D':
  1409. X! # endif
  1410. X          case 'X':
  1411. X  # ifdef WIZARD
  1412. X              /* Must have "name" set correctly by NETHACK.CNF,
  1413. X               * NETHACKOPTIONS, or -U
  1414. X               * before this flag to enter wizard mode. */
  1415. X!             if(!strcmp(plname, WIZARD))
  1416. X                  wizard = TRUE;
  1417. X! # endif
  1418. X! # if defined(WIZARD) && defined(EXPLORE_MODE)
  1419. X!             else
  1420. X  # endif
  1421. X  # ifdef EXPLORE_MODE
  1422. X!                 discover = TRUE;
  1423. X  # endif
  1424. X              break;
  1425. X  #endif
  1426. X  #ifdef NEWS
  1427. X-         case 'N':
  1428. X- # ifndef TOS
  1429. X          case 'n':
  1430. X- # endif
  1431. X              flags.nonews = TRUE;
  1432. X              break;
  1433. X  #endif
  1434. X-         case 'U':
  1435. X- #ifndef TOS
  1436. X          case 'u':
  1437. X- #endif
  1438. X              if(argv[0][2])
  1439. X                (void) strncpy(plname, argv[0]+2, sizeof(plname)-1);
  1440. X              else if(argc > 1) {
  1441. X--- 175,206 ----
  1442. X          argc--;
  1443. X          switch(argv[0][1]){
  1444. X  #if defined(WIZARD) || defined(EXPLORE_MODE)
  1445. X! # ifndef EXPLORE_MODE
  1446. X          case 'X':
  1447. X+ # endif
  1448. X+         case 'D':
  1449. X  # ifdef WIZARD
  1450. X              /* Must have "name" set correctly by NETHACK.CNF,
  1451. X               * NETHACKOPTIONS, or -U
  1452. X               * before this flag to enter wizard mode. */
  1453. X!             if(!strcmp(plname, WIZARD)) {
  1454. X                  wizard = TRUE;
  1455. X!                 break;
  1456. X!             }
  1457. X!             /* otherwise fall thru to discover */
  1458. X  # endif
  1459. X  # ifdef EXPLORE_MODE
  1460. X!         case 'X':
  1461. X!             discover = TRUE;
  1462. X  # endif
  1463. X              break;
  1464. X  #endif
  1465. X  #ifdef NEWS
  1466. X          case 'n':
  1467. X              flags.nonews = TRUE;
  1468. X              break;
  1469. X  #endif
  1470. X          case 'u':
  1471. X              if(argv[0][2])
  1472. X                (void) strncpy(plname, argv[0]+2, sizeof(plname)-1);
  1473. X              else if(argc > 1) {
  1474. X***************
  1475. X*** 223,251 ****
  1476. X                  Printf("Player name expected after -U\n");
  1477. X              break;
  1478. X  #ifdef DGK
  1479. X!         /* Person does not want to use a ram disk
  1480. X           */
  1481. X- # ifdef TOS
  1482. X-         case 'R':
  1483. X- # else
  1484. X          case 'r':
  1485. X- # endif
  1486. X              ramdisk = FALSE;
  1487. X              break;
  1488. X  #endif
  1489. X-         case 'C':   /* character role is next character */
  1490. X-             /* allow -CT for Tourist, etc. */
  1491. X-             (void) strncpy(pl_character, argv[0]+2,
  1492. X-                 sizeof(pl_character)-1);
  1493. X-             break;
  1494. X          default:
  1495. X- #ifndef TOS
  1496. X              /* allow -T for Tourist, etc. */
  1497. X              (void) strncpy(pl_character, argv[0]+1,
  1498. X                  sizeof(pl_character)-1);
  1499. X- #else
  1500. X-             Printf("Unknown option: %s\n", *argv);
  1501. X- #endif
  1502. X          }
  1503. X      }
  1504. X  
  1505. X--- 211,226 ----
  1506. X                  Printf("Player name expected after -U\n");
  1507. X              break;
  1508. X  #ifdef DGK
  1509. X!         /* Player doesn't want to use a RAM disk
  1510. X           */
  1511. X          case 'r':
  1512. X              ramdisk = FALSE;
  1513. X              break;
  1514. X  #endif
  1515. X          default:
  1516. X              /* allow -T for Tourist, etc. */
  1517. X              (void) strncpy(pl_character, argv[0]+1,
  1518. X                  sizeof(pl_character)-1);
  1519. X          }
  1520. X      }
  1521. X  
  1522. X***************
  1523. X*** 297,302 ****
  1524. X--- 272,283 ----
  1525. X  #endif /* DGK */
  1526. X          ((fd = open(SAVEF, OMASK)) >= 0) &&
  1527. X          (uptodate(fd) || !unlink(SAVEF))) {
  1528. X+ #ifdef WIZARD
  1529. X+         /* Since wizard is actually flags.debug, restoring might
  1530. X+          * overwrite it.
  1531. X+          */
  1532. X+         boolean remember_wiz_mode = wizard;
  1533. X+ #endif
  1534. X  #ifndef NO_SIGNAL
  1535. X          (void) signal(SIGINT, (SIG_RET_TYPE) done1);
  1536. X  #endif
  1537. X***************
  1538. X*** 304,309 ****
  1539. X--- 285,293 ----
  1540. X          (void) fflush(stdout);
  1541. X          if(!dorecover(fd))
  1542. X              goto not_recovered;
  1543. X+ #ifdef WIZARD
  1544. X+         if(!wizard && remember_wiz_mode) wizard = TRUE;
  1545. X+ #endif
  1546. X          pline("Hello %s, welcome to NetHack!", plname);
  1547. X          /* get shopkeeper set properly if restore is in shop */
  1548. X          (void) inshop();
  1549. X***************
  1550. X*** 349,535 ****
  1551. X  #ifdef OS2
  1552. X      gettty(); /* somehow ctrl-P gets turned back on during startup ... */
  1553. X  #endif
  1554. X!     /* Help for Microsoft optimizer.  Otherwise main is too large -dgk*/
  1555. X      moveloop();
  1556. X      return 0;
  1557. X  }
  1558. X  
  1559. X- static void
  1560. X- moveloop()
  1561. X- {
  1562. X-     char ch;
  1563. X-     int abort;
  1564. X- 
  1565. X-     for(;;) {
  1566. X-         if(flags.move) {    /* actual time passed */
  1567. X- 
  1568. X- #ifdef SOUNDS
  1569. X-             dosounds();
  1570. X- #endif
  1571. X-             settrack();
  1572. X- 
  1573. X-             if(moves%2 == 0 ||
  1574. X-               (!(Fast & ~INTRINSIC) && (!Fast || rn2(3)))) {
  1575. X-                 movemon();
  1576. X- #ifdef HARD
  1577. X-                 if(!rn2(u.udemigod?25:(dlevel>30)?50:70))
  1578. X- #else
  1579. X-                 if(!rn2(70))
  1580. X- #endif
  1581. X-                     (void) makemon((struct permonst *)0, 0, 0);
  1582. X-             }
  1583. X-             if(Glib) glibr();
  1584. X-             timeout();
  1585. X-             ++moves;
  1586. X- #ifdef THEOLOGY
  1587. X-             if (u.ublesscnt)  u.ublesscnt--;
  1588. X- #endif
  1589. X- #ifdef POLYSELF
  1590. X-             if(u.mtimedone)
  1591. X-                 if(u.mh < 1) rehumanize();
  1592. X-             else
  1593. X- #endif
  1594. X-                 if(u.uhp < 1) {
  1595. X-                 You("die...");
  1596. X-                 done(DIED);
  1597. X-                 }
  1598. X- #ifdef POLYSELF
  1599. X-             if (u.mtimedone) {
  1600. X-                 if (u.mh < u.mhmax) {
  1601. X-                 if (Regeneration || !(moves%20)) {
  1602. X-                     flags.botl = 1;
  1603. X-                     u.mh++;
  1604. X-                 }
  1605. X-                 }
  1606. X-             }
  1607. X- #endif
  1608. X-             if(u.uhp < u.uhpmax) {
  1609. X-                 if(u.ulevel > 9) {
  1610. X-                     int heal;
  1611. X- 
  1612. X-                     if(HRegeneration || !(moves%3)) {
  1613. X-                     flags.botl = 1;
  1614. X-                     if (ACURR(A_CON) <= 12) heal = 1;
  1615. X-                     else heal = rnd((int) ACURR(A_CON)-12);
  1616. X-                     if (heal > u.ulevel-9) heal = u.ulevel-9;
  1617. X-                     u.uhp += heal;
  1618. X-                     if(u.uhp > u.uhpmax)
  1619. X-                         u.uhp = u.uhpmax;
  1620. X-                     }
  1621. X-                 } else if(HRegeneration ||
  1622. X-                     (!(moves%((MAXULEV+12)/(u.ulevel+2)+1)))) {
  1623. X-                     flags.botl = 1;
  1624. X-                     u.uhp++;
  1625. X-                 }
  1626. X-             }
  1627. X- #ifdef SPELLS
  1628. X-             if ((u.uen<u.uenmax) && (!(moves%(19-ACURR(A_INT)/2)))) {
  1629. X-                 u.uen += rn2((int)ACURR(A_WIS)/5 + 1) + 1;
  1630. X-                 if (u.uen > u.uenmax)  u.uen = u.uenmax;
  1631. X-                 flags.botl = 1;
  1632. X-             }
  1633. X- #endif
  1634. X-             if(Teleportation && !rn2(85)) tele();
  1635. X- #ifdef POLYSELF
  1636. X-             if(Polymorph && !rn2(100))
  1637. X-                 polyself();
  1638. X-             if(u.ulycn >= 0 && !rn2(80 - (20 * night())))
  1639. X-                 you_were();
  1640. X- #endif
  1641. X-             if(Searching && multi >= 0) (void) dosearch0(1);
  1642. X-             gethungry();
  1643. X-             hatch_eggs();
  1644. X-             invault();
  1645. X-             amulet();
  1646. X- #ifdef HARD
  1647. X-             if (!rn2(40+(int)(ACURR(A_DEX)*3))) u_wipe_engr(rnd(3));
  1648. X-             if (u.udemigod) {
  1649. X- 
  1650. X-                 u.udg_cnt--;
  1651. X-                 if(u.udg_cnt <= 0) {
  1652. X- 
  1653. X-                     intervene();
  1654. X-                     u.udg_cnt = rn1(200, 50);
  1655. X-                 }
  1656. X-             }
  1657. X- #endif
  1658. X-             restore_attrib();
  1659. X-         }
  1660. X-         if(multi < 0) {
  1661. X-             if(!++multi){
  1662. X-                 pline(nomovemsg ? nomovemsg :
  1663. X-                     "You can move again.");
  1664. X-                 nomovemsg = 0;
  1665. X-                 if(afternmv) (*afternmv)();
  1666. X-                 afternmv = 0;
  1667. X-             }
  1668. X-         }
  1669. X- 
  1670. X-         find_ac();
  1671. X-         if(!flags.mv || Blind)
  1672. X-         {
  1673. X-             seeobjs();
  1674. X-             seemons();
  1675. X-             seeglds();
  1676. X-             nscr();
  1677. X-         }
  1678. X-         if(flags.time) flags.botl = 1;
  1679. X- 
  1680. X-         if(flags.botl || flags.botlx) bot();
  1681. X- 
  1682. X-         flags.move = 1;
  1683. X- 
  1684. X-         if(multi >= 0 && occupation) {
  1685. X-             abort = 0;
  1686. X-             if (kbhit()) {
  1687. X-                 if ((ch = Getchar()) == ABORT)
  1688. X-                     abort++;
  1689. X- #ifdef REDO
  1690. X-                 else
  1691. X-                     pushch(ch);
  1692. X- #endif /* REDO */
  1693. X-             }
  1694. X-             if(abort || monster_nearby())
  1695. X-                 stop_occupation();
  1696. X-             else if ((*occupation)() == 0)
  1697. X-                 occupation = 0;
  1698. X-             if (!(++occtime % 7))
  1699. X-                 (void) fflush(stdout);
  1700. X-             continue;
  1701. X-         }
  1702. X- 
  1703. X-         if((u.uhave_amulet || Clairvoyant) && 
  1704. X- #ifdef ENDGAME
  1705. X-             dlevel != ENDLEVEL &&
  1706. X- #endif
  1707. X-             !(moves%15) && !rn2(2)) do_vicinity_map();
  1708. X- 
  1709. X-         u.umoved = FALSE;
  1710. X-         if(multi > 0) {
  1711. X-             lookaround();
  1712. X-             if(!multi) {    /* lookaround may clear multi */
  1713. X-                 flags.move = 0;
  1714. X-                 continue;
  1715. X-             }
  1716. X-             if(flags.mv) {
  1717. X-                 if(multi < COLNO && !--multi)
  1718. X-                     flags.mv = flags.run = 0;
  1719. X-                 domove();
  1720. X-             } else {
  1721. X-                 --multi;
  1722. X-                 rhack(save_cm);
  1723. X-             }
  1724. X-         } else if(multi == 0) {
  1725. X- #ifdef MAIL
  1726. X-             ckmailstatus();
  1727. X- #endif
  1728. X-             rhack(NULL);
  1729. X-         }
  1730. X-         if(multi && multi%7 == 0)
  1731. X-             (void) fflush(stdout);
  1732. X-     }
  1733. X- }
  1734. X- 
  1735. X  /*
  1736. X   * plname is filled either by an option (-U Player  or  -UPlayer) or
  1737. X   * explicitly (by being the wizard) or by askname.
  1738. X--- 333,343 ----
  1739. X  #ifdef OS2
  1740. X      gettty(); /* somehow ctrl-P gets turned back on during startup ... */
  1741. X  #endif
  1742. X! 
  1743. X      moveloop();
  1744. X      return 0;
  1745. X  }
  1746. X  
  1747. X  /*
  1748. X   * plname is filled either by an option (-U Player  or  -UPlayer) or
  1749. X   * explicitly (by being the wizard) or by askname.
  1750. X***************
  1751. X*** 561,581 ****
  1752. X              msmsg("%c", c);
  1753. X  #endif
  1754. X              plname[ct++] = c;
  1755. X!     }
  1756. X      }
  1757. X      plname[ct] = 0;
  1758. X      if(ct == 0) askname();
  1759. X  }
  1760. X  
  1761. X- /*VARARGS1*/
  1762. X- void
  1763. X- impossible(s,x1,x2)
  1764. X-     register char *s, *x1, *x2;
  1765. X- {
  1766. X-     pline(s,x1,x2);
  1767. X-     pline("Program in disorder - perhaps you'd better Quit.");
  1768. X- }
  1769. X- 
  1770. X  #ifdef CHDIR
  1771. X  void
  1772. X  chdirx(dir, wr)
  1773. X--- 369,380 ----
  1774. X              msmsg("%c", c);
  1775. X  #endif
  1776. X              plname[ct++] = c;
  1777. X!         }
  1778. X      }
  1779. X      plname[ct] = 0;
  1780. X      if(ct == 0) askname();
  1781. X  }
  1782. X  
  1783. X  #ifdef CHDIR
  1784. X  void
  1785. X  chdirx(dir, wr)
  1786. X***************
  1787. X*** 593,599 ****
  1788. X      chdrive(dir);
  1789. X  #endif
  1790. X  
  1791. X!     /* warn the player if he cannot write the record file */
  1792. X      /* perhaps we should also test whether . is writable */
  1793. X      /* unfortunately the access systemcall is worthless */
  1794. X      if(wr) {
  1795. X--- 392,398 ----
  1796. X      chdrive(dir);
  1797. X  #endif
  1798. X  
  1799. X!     /* warn the player if we can't write the record file */
  1800. X      /* perhaps we should also test whether . is writable */
  1801. X      /* unfortunately the access systemcall is worthless */
  1802. X      if(wr) {
  1803. X***************
  1804. X*** 637,696 ****
  1805. X      }
  1806. X  }
  1807. X  #endif /* CHDIR /**/
  1808. X- 
  1809. X- void
  1810. X- stop_occupation()
  1811. X- {
  1812. X-     if(occupation) {
  1813. X-         You("stop %s.", occtxt);
  1814. X-         occupation = 0;
  1815. X- #ifdef REDO
  1816. X-         multi = 0;
  1817. X-         pushch(0);
  1818. X- #endif
  1819. X-     }
  1820. X- }
  1821. X- 
  1822. X- static void
  1823. X- newgame() {
  1824. X- #ifdef DGK
  1825. X-     gameDiskPrompt();
  1826. X- #endif
  1827. X- 
  1828. X-     fobj = fcobj = invent = 0;
  1829. X-     fmon = fallen_down = 0;
  1830. X-     ftrap = 0;
  1831. X-     fgold = 0;
  1832. X-     flags.ident = 1;
  1833. X- 
  1834. X-     init_objects();
  1835. X-     u_init();
  1836. X- 
  1837. X- #ifndef NO_SIGNAL
  1838. X-     (void) signal(SIGINT, (SIG_RET_TYPE) done1);
  1839. X- #endif
  1840. X- 
  1841. X-     mklev();
  1842. X-     u.ux = xupstair;
  1843. X-     u.uy = yupstair;
  1844. X-     (void) inshop();
  1845. X- 
  1846. X-     setsee();
  1847. X-     flags.botlx = 1;
  1848. X- 
  1849. X-     /* Move the monster from under you or else
  1850. X-      * makedog() will fail when it calls makemon().
  1851. X-      *             - ucsfcgl!kneller
  1852. X-      */
  1853. X-     if(levl[u.ux][u.uy].mmask) mnexto(m_at(u.ux, u.uy));
  1854. X- 
  1855. X-     (void) makedog();
  1856. X-     seemons();
  1857. X- #ifdef NEWS
  1858. X-     if(flags.nonews || !readnews())
  1859. X-         /* after reading news we did docrt() already */
  1860. X- #endif
  1861. X-         docrt();
  1862. X- 
  1863. X-     return;
  1864. X- }
  1865. X--- 436,438 ----
  1866. X*** others/Old/pctty.c    Wed Sep 27 10:23:29 1989
  1867. X--- others/pctty.c    Sun Sep 17 14:27:07 1989
  1868. X***************
  1869. X*** 3,8 ****
  1870. X--- 3,9 ----
  1871. X  /* NetHack may be freely redistributed.  See license for details. */
  1872. X  /* tty.c - (PC) version */
  1873. X  
  1874. X+ #define NEED_VARARGS
  1875. X  #include "hack.h"
  1876. X  
  1877. X  char erase_char, kill_char;
  1878. X***************
  1879. X*** 35,47 ****
  1880. X  
  1881. X  /* fatal error */
  1882. X  /*VARARGS1*/
  1883. X  void
  1884. X! error(s,x,y)
  1885. X! char *s, *x, *y;
  1886. X! {
  1887. X      end_screen();
  1888. X      putchar('\n');
  1889. X!     Printf(s,x,y);
  1890. X      putchar('\n');
  1891. X      exit(1);
  1892. X  }
  1893. X--- 36,50 ----
  1894. X  
  1895. X  /* fatal error */
  1896. X  /*VARARGS1*/
  1897. X+ 
  1898. X  void
  1899. X! error VA_DECL(char *,s)
  1900. X!     VA_START(s);
  1901. X!     VA_INIT(s, char *);
  1902. X      end_screen();
  1903. X      putchar('\n');
  1904. X!     Vprintf(s,VA_ARGS);
  1905. X      putchar('\n');
  1906. X+     VA_END();
  1907. X      exit(1);
  1908. X  }
  1909. X
  1910. X*** auxil/Old/Guidebook.mn    Wed Sep 27 10:15:37 1989
  1911. X--- auxil/Guidebook.mn    Thu Sep 14 13:21:09 1989
  1912. X***************
  1913. X*** 4,10 ****
  1914. X  .ds vr "NetHack Version 3.0
  1915. X  .ds f0 "\*(vr
  1916. X  .ds f1
  1917. X! .ds f2 "August 13, 1989
  1918. X  .mt
  1919. X  A Guide to the Mazes of Menace
  1920. X  .au
  1921. X--- 4,10 ----
  1922. X  .ds vr "NetHack Version 3.0
  1923. X  .ds f0 "\*(vr
  1924. X  .ds f1
  1925. X! .ds f2 "September 6, 1989
  1926. X  .mt
  1927. X  A Guide to the Mazes of Menace
  1928. X  .au
  1929. X***************
  1930. X*** 497,523 ****
  1931. X  .lp #
  1932. X  perform an extended command.  As you can see, the authors of NetHack
  1933. X  used up all the letters, so this is a way to introduce the less useful
  1934. X! commands.  You may obtain a list of them by entering `?'.  What
  1935. X! extended commands are available depend on what features the game was
  1936. X! compiled with.  Most extended commands are used only under limited
  1937. X! circumstances. Note that if your keyboard has a meta key (that is, one which
  1938. X! when pressed in combination with another key modified it by turning on
  1939. X! the 'meta' or 0x80 bit) these extended commands can be invoked by meta-ing the
  1940. X! first letter of the command.
  1941. X  .pg
  1942. X  If the
  1943. X  .op number_pad
  1944. X  option is on, some additional letter commands are available:
  1945. X  .lp j
  1946. X! jump to another location.  Same as ``#jump'' or meta-j.
  1947. X  .lp k
  1948. X  kick something (usually a door).  Same as `^D'.
  1949. X  .lp l
  1950. X! loot a box on the floor.  Same as ``#loot'' or meta-l.
  1951. X  .lp N
  1952. X! name an object or type of object.  Same as ``#name'' or meta-n.
  1953. X  .lp u
  1954. X! untrap a trapped object or door.  Same as ``#untrap'' or meta-u.
  1955. X  
  1956. X  .hn 1
  1957. X  Rooms and corridors
  1958. X--- 497,553 ----
  1959. X  .lp #
  1960. X  perform an extended command.  As you can see, the authors of NetHack
  1961. X  used up all the letters, so this is a way to introduce the less useful
  1962. X! commands, or commands used under limited circumstances.  You may obtain a
  1963. X! list of them by entering `?'.  What extended commands are available
  1964. X! depend on what features the game was compiled with.
  1965. X  .pg
  1966. X+ If your keyboard has a meta key (which, when pressed in combination
  1967. X+ with another key, modifies it by setting the `meta' [8th, or `high']
  1968. X+ bit), you can invoke the extended commands by meta-ing the first
  1969. X+ letter of the command.  In PC NetHack and ST NetHack, the `Alt' key
  1970. X+ can be used in this fashion.
  1971. X+ .lp M-c
  1972. X+ talk to someone.
  1973. X+ .lp M-d
  1974. X+ dip an object into something.
  1975. X+ .lp M-f
  1976. X+ force a lock.
  1977. X+ .lp M-j
  1978. X+ jump to another location.
  1979. X+ .lp M-l
  1980. X+ loot a box on the floor.
  1981. X+ .lp M-m
  1982. X+ use a monster's special ability.
  1983. X+ .lp M-N
  1984. X+ Name an item or type of object.
  1985. X+ .lp M-o
  1986. X+ offer a sacrifice to the gods.
  1987. X+ .lp M-p
  1988. X+ pray to the gods for help.
  1989. X+ .lp M-r
  1990. X+ rub a lamp.
  1991. X+ .lp M-s
  1992. X+ sit down.
  1993. X+ .lp M-t
  1994. X+ turn undead.
  1995. X+ .lp M-u
  1996. X+ untrap something (usually a trapped object).
  1997. X+ .lp M-w
  1998. X+ wipe off your face.
  1999. X+ .pg
  2000. X  If the
  2001. X  .op number_pad
  2002. X  option is on, some additional letter commands are available:
  2003. X  .lp j
  2004. X! jump to another location.  Same as ``#jump'' or ``M-j''.
  2005. X  .lp k
  2006. X  kick something (usually a door).  Same as `^D'.
  2007. X  .lp l
  2008. X! loot a box on the floor.  Same as ``#loot'' or ``M-l''.
  2009. X  .lp N
  2010. X! name an item or type of object.  Same as ``#name'' or ``M-N''.
  2011. X  .lp u
  2012. X! untrap a trapped object or door.  Same as ``#untrap'' or ``M-u''.
  2013. X  
  2014. X  .hn 1
  2015. X  Rooms and corridors
  2016. X***************
  2017. X*** 537,543 ****
  2018. X  .pg
  2019. X  You can get through a locked door by using a tool to pick the lock
  2020. X  with the `a' (apply) command, or by kicking it open with the `^D'
  2021. X! command.
  2022. X  .pg
  2023. X  Secret doors [and corridors] are hidden.  You can find them with the
  2024. X  `s' (search) command.
  2025. X--- 567,573 ----
  2026. X  .pg
  2027. X  You can get through a locked door by using a tool to pick the lock
  2028. X  with the `a' (apply) command, or by kicking it open with the `^D'
  2029. X! (kick) command.
  2030. X  .pg
  2031. X  Secret doors [and corridors] are hidden.  You can find them with the
  2032. X  `s' (search) command.
  2033. X***************
  2034. X*** 824,830 ****
  2035. X  .pg
  2036. X  The command to read a spell book is the same as for scrolls, `r'
  2037. X  (read).  The `+' command lists your current spells and the number of
  2038. X! spell points they require.  The `Z' command casts a spell.
  2039. X  .hn 2
  2040. X  Tools (`(')
  2041. X  .pg
  2042. X--- 854,860 ----
  2043. X  .pg
  2044. X  The command to read a spell book is the same as for scrolls, `r'
  2045. X  (read).  The `+' command lists your current spells and the number of
  2046. X! spell points they require.  The `Z' (cast) command casts a spell.
  2047. X  .hn 2
  2048. X  Tools (`(')
  2049. X  .pg
  2050. X***************
  2051. X*** 1019,1025 ****
  2052. X  (default on) pick up things you move onto by default.
  2053. X  .lp rawio\ \ \ 
  2054. X  (default off) force raw (non-cbreak) mode for faster output and more
  2055. X! bulletproof input (MS-DOS sometimes treats ^P as a printer toggle
  2056. X  without it).  Note: DEC Rainbows hang if this is turned on.
  2057. X  Cannot be set with the `O' command.
  2058. X  .lp rest_on_space
  2059. X--- 1049,1055 ----
  2060. X  (default on) pick up things you move onto by default.
  2061. X  .lp rawio\ \ \ 
  2062. X  (default off) force raw (non-cbreak) mode for faster output and more
  2063. X! bulletproof input (MS-DOS sometimes treats `^P' as a printer toggle
  2064. X  without it).  Note: DEC Rainbows hang if this is turned on.
  2065. X  Cannot be set with the `O' command.
  2066. X  .lp rest_on_space
  2067. END_OF_FILE
  2068. if test 57252 -ne `wc -c <'patches04g'`; then
  2069.     echo shar: \"'patches04g'\" unpacked with wrong size!
  2070. fi
  2071. # end of 'patches04g'
  2072. fi
  2073. echo shar: End of archive 7 \(of 11\).
  2074. cp /dev/null ark7isdone
  2075. MISSING=""
  2076. for I in 1 2 3 4 5 6 7 8 9 10 11 ; do
  2077.     if test ! -f ark${I}isdone ; then
  2078.     MISSING="${MISSING} ${I}"
  2079.     fi
  2080. done
  2081. if test "${MISSING}" = "" ; then
  2082.     echo You have unpacked all 11 archives.
  2083.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  2084. else
  2085.     echo You still need to unpack the following archives:
  2086.     echo "        " ${MISSING}
  2087. fi
  2088. ##  End of shell archive.
  2089. exit 0
  2090.